package view;

import org.uqbar.arena.actions.MessageSend;
import org.uqbar.arena.bindings.NotNullObservable;
import org.uqbar.arena.layout.HorizontalLayout;
import org.uqbar.arena.widgets.Button;
import org.uqbar.arena.widgets.Panel;
import org.uqbar.arena.widgets.tables.Column;
import org.uqbar.arena.widgets.tables.Table;
import org.uqbar.arena.windows.Dialog;
import org.uqbar.arena.windows.SimpleWindow;
import org.uqbar.arena.windows.WindowOwner;

import ApplicationModels.CompromisosAppModel;
import ApplicationModels.EmpleadoAppModel;
import ApplicationModels.GestionEmpleadosAppModel;
import Domain.Empleado;

public class GestionEmpleadosWindow extends
		SimpleWindow<GestionEmpleadosAppModel> {

	public GestionEmpleadosWindow(WindowOwner parent,
			GestionEmpleadosAppModel model) {
		super(parent, model);
	}

	@Override
	protected void createMainTemplate(Panel mainPanel) {
		this.setTitle("Gestion de Empleados");

		super.createMainTemplate(mainPanel);

		this.createResultsGrid(mainPanel);
		this.createGridActions(mainPanel);
	}

	@Override
	protected void addActions(Panel acciones) {
		new Button(acciones).setCaption("Agregar empleado")
				.onClick(new MessageSend(this, "crearEmpleado")).setAsDefault()
				.disableOnError();

		new Button(acciones) //
				.setCaption("Ver compromisos").onClick(
						new MessageSend(this, "verCompromisos"));

	}

	protected void createResultsGrid(Panel mainPanel) {
		Table<Empleado> table = new Table<Empleado>(mainPanel, Empleado.class);
		
		table.setHeigth(250);
		table.setWidth(450);

		table.bindItemsToProperty("empleados");
		table.bindValueToProperty("empleadoSeleccionado");

		this.describeResultsGrid(table);
	}

	protected void describeResultsGrid(Table<Empleado> table) {
		new Column<Empleado>(table)
				//
				.setTitle("Nombre y Apellido").setFixedSize(150)
				.bindContentsToProperty("nombreYApellido");

		new Column<Empleado>(table)
				//
				.setTitle("Legajo").setFixedSize(100)
				.bindContentsToProperty("legajo");

		Column<Empleado> dispo = new Column<Empleado>(table);
		//
		dispo.setTitle("Dias disponibles").setFixedSize(200)
				.bindContentsToProperty("keysDisponibilidad");

	}

	protected void createGridActions(Panel mainPanel) {

		Panel actionsPanel = new Panel(mainPanel);
		actionsPanel.setLayout(new HorizontalLayout());

		Button edit = new Button(actionsPanel);
		edit.setCaption("Editar");
		edit.onClick(new MessageSend(this, "modificarEmpleado"));

		Button remove = new Button(actionsPanel);
		remove.setCaption("Borrar");
		remove.onClick(new MessageSend(this.getModelObject(),
				"eliminarEmpleadoSeleccionado"));

		// Deshabilitar los botones si no hay ningún elemento seleccionado en la
		// grilla.
		NotNullObservable elementSelected = new NotNullObservable(
				"empleadoSeleccionado");
		remove.bindEnabled(elementSelected);
		edit.bindEnabled(elementSelected);

		Button cerrar = new Button(mainPanel);
		cerrar.setCaption("Cerrar");
		cerrar.onClick(new MessageSend(this, "close"));

	}

	@Override
	protected void createFormPanel(Panel mainPanel) {

	}

	// /////// ACCIONES //////

	public void modificarEmpleado() {

		this.openDialog(new EditarEmpleadoWindow(this, new EmpleadoAppModel(this.getModelObject()
				.getEmpleadoSeleccionado(), this.getModelObject().getTienda())));

	}

	public void verCompromisos() {

		this.openDialog(new CompromisosWindow(this, new CompromisosAppModel(this
				.getModelObject().getTienda())));

	}

	public void crearEmpleado() {
		NuevoEmpleadoWindow dialog = new NuevoEmpleadoWindow(this, this.getModelObject().getTienda());
		dialog.onAccept(new MessageSend(this.getModelObject(), "cambiaronLosEmpleados"));
		this.openDialog(dialog);
	}

	protected void openDialog(Dialog<?> dialog) {
		dialog.open();
	}

}
